package com.qfedu.entity.course01;

public class Poly {
    public void polyAdd(PNode heada, PNode headb) {
        PNode pre, qa, qb;
        int sum;
        pre = heada;
        //多项式a的第一个节点
        qa = heada.next;
        //多项式b的第一个节点
        qb = headb.next;
        while (qa != null && qb != null) {
            //指数相等
            if (qa.exp == qb.exp) {
                //系数相加
                sum = qa.coef + qb.coef;
                if (sum != 0) {
                    qa.coef = sum;
                    pre = qa;
                } else {
                    //相加后系数为0，在表达式中可以省略不写，也就是该节点不用加入链表中
                    pre.next = qa.next;
                }
                //多项式a的下一个节点
                qa = pre.next;
                //多项式b的下一个节点
                qb = qb.next;
            } else {
                //指数不同
                if (qa.exp > qb.exp) {
                    //多项式a 节点的指数大于 多项式b节点的指数，此时将多项式a节点向后遍历即可
                    pre = qa;
                    qa = qa.next;
                } else {
                    //多项式b 节点的指数大于 多项式a节点的指数，此时将多项式b的节点插入到多项式a中，并向后遍历多项式b
                    pre.next = qb;
                    pre = qb;
                    qb = qb.next;
                    pre.next = qa;
                }
            }
        }
        //多项式b的如果还有节点，添加到pre节点之后
        if (qb != null) {
            pre.next = qb;
        }
    }

    public static class PNode {
        /*系数域*/
        int coef;
        /*指数域*/
        int exp;
        /*指针域*/
        PNode next;
    }

}
